/* 

 * feat：新增功能
 * fix：bug 修复
 * docs：文档更新
 * style：不影响程序逻辑的代码修改(修改空白字符，格式缩进，补全缺失的分号等，没有改变代码逻辑)
 * refactor：重构代码(既没有新增功能，也没有修复 bug)
 * perf：性能, 体验优化
 * test：新增测试用例或是更新现有测试
 * build：主要目的是修改项目构建系统(例如 glup，webpack，rollup 的配置等)的提交
 * ci：主要目的是修改项目继续集成流程(例如 Travis，Jenkins，GitLab CI，Circle等)的提交
 * chore：不属于以上类型的其他类型，比如构建流程, 依赖管理
 * revert：回滚某个更早之前的提交
*/

const exec = require('child_process').exec;
function execute(cmd) {
  exec(cmd, function (error) {
    if (error) {
      console.error(error);
    } else {
      console.log('push 成功');
    }
  });
}
let type = process.argv[2];
let subject = process.argv[3];
if (!type) {
  throw new Error(
    '请输入提交类型，包含：feat、fix、docs、style、refactor、pref、test、build、ci、chore、revert',
  );
} else {
  let arr = [
    'feat',
    'fix',
    'docs',
    'style',
    'refactor',
    'pref',
    'test',
    'build',
    'ci',
    'chore',
    'revert',
  ];
  if (!arr.some(v => v === type)) {
    throw new Error(
      '输入类型不正确，类型应该为：feat、fix、docs、style、refactor、pref、test、build、ci、chore、revert其中一个',
    );
  }
}
if (!subject) {
  throw new Error('请输入提交内容');
}
let message = `"${type}(): ${subject}"`;
if (message) {
  execute(`git add . && git commit -m ${message} && git push`);
}
